
//package com.x52im.rainbowchat.logic.chat_friend.meta;
//
//import android.graphics.drawable.Drawable;
//import android.util.Log;
//
//import com.eva.epc.common.file.FileHelper;
//import com.eva.epc.common.util.CommonUtils;
//import com.eva.epc.common.util.MapNoHash;
//import ToolKits;
//
//import java.io.File;
//import java.util.ArrayList;
//import java.util.Arrays;
//
///**
// * 场景元数据模型.
// *
// * <p>
// * 场景数据分为二类：一类是本地用户自已购买（下载的），一类是缓存的好友对方的。<br>
// * <br>
// * <b>区别在于，本地自已的形象用于发送、缓存的对方的场景目的是用于接收好友的指令的：</b>
// * <ul>
// * <li>本地场景用于本地用户向对象进行的场景展示（类似于qq形象），包括可以向对象发送背景图切换请求、声音、快捷加入复等；</li>
// * <li>缓存对方场景，是为了当对方在发送他的场景数据时，本地用户能直接读取他的场景数据，而不用从网络传输（只需传输指令即可）。</li>
// * </ul>
// *
// * <b>特别说明：</b>本类对象必须显式调用 {@link #loadDatas()}载入数据后才拥有真正的数据模型，否则数据模型是空的.
// *
// * @author Jack Jiang(http://www.52im.net/space-uid-1.html)
// * @version 1.0
// * @deprecated 本类已停用！
// */
//public class SenceMeta
//{
//	//***************************************************************************** class fields
//	private final static String TAG = SenceMeta.class.getSimpleName();
//
//	// 根目标
//	public final static String ROOT_PATH = "/sdcard/missu/";
//	// 临时目录：本目录通常用于临时用途，比如：下载的角色.zip文件先放在这个文件夹，解压完成后再把.zip从这个文件夹删除
//	public final static String TEMP_PATH = ROOT_PATH+"temp/";
//
//	/** 我自已的场景根路径 */
//	public final static String $MY_SENCE_PATH = "sences/my_sences/";
//	/** 我缓存的对方场景根路径 */
//	public final static String $FRIEND_SENCE_PATH = "sences/friend_sences/";
//	//
//	public final static String SENCE_BACKGROUNDS_DIR = "backgrounds/";
//	//
//	public final static String SENCE_FACES_DIR = "faces/";
//	//
//	public final static String SENCE_SOUNDS_DIR = "sounds/";
//	//
//	public final static String SENCE_REPLIES_FILE = "replies.txt";
//	// 每一个表情里的声音文件（文件个数<=1个），且文件名必须是audio.mp3、audio.wav等样
//	// 该音频文件通常位于每一个表情文件夹的目录内
//	public final static String SENCE_FACE_AUDIO_NAME = "audio";
//
//	//***************************************************************************** instance fields
//	// key = ident, value = filepath
//	private MapNoHash<String, File> backgroundsMap = new MapNoHash<String, File>();
//	// key = ident, value = <filepath>
//	private MapNoHash<String, ArrayList<File>> facesMap = new MapNoHash<String, ArrayList<File>>();
//	// key = ident, value = filepath
//	private MapNoHash<String, File> soundsMap = new MapNoHash<String, File>();
//	// value = message content
//	private ArrayList<String> repliesArray = new ArrayList<String>();
//
//	/**
//	 * 本场景描述对象所封装的场景id */
//	private String senceName = null;
//	/**
//	 * 本场景的所有资源是否已经载入完毕.
//	 *
//	 * <p>
//	 * true表示载入完毕，否则表示没有截入。默认是false。
//	 *
//	 * <p>
//	 * <b>提示：</b>一个场景只有在截入完毕的情下，该场景对应的数据模型才建立完毕，否则数据模型是空的. */
//	private boolean hasLoaded = false;
//	/**
//	 * true表示本类提供的是本地用户自已的场景，否则表示提供的是缓存的对方（好友）的场景数据模型。
//	 * <p>
//	 * 区别在于：本地用户自已的场景跟缓存的对方（好友）的场景所存储的目录是不相同的。
//	 *
//	 * @see #$MY_SENCE_PATH
//	 * @see #$FRIEND_SENCE_PATH */
//	private boolean myselfScence = true;
//
//	/**
//	 * 临时文件夹，形如："/sdcard/missu/temp/"。
//	 *
//	 * @return
//	 */
//	public static String getTempAbsolutePath()
//	{
//		return TEMP_PATH;
//	}
//
//	/**
//	 * 所有场景的绝对路径，形如："/sdcard/missu/sences/my_sences/"
//	 * 	或"/sdcard/missu/sences/friend_sences/"。
//	 *
//	 * @return
//	 */
//	public static String getSenceAbsolutePath(boolean myselfScence)
//	{
//		return ROOT_PATH+(myselfScence?$MY_SENCE_PATH:$FRIEND_SENCE_PATH);
//	}
//	/**
//	 * <b>注意：</b>当 {@link #isHasLoaded()} == false，本方法将不能返回需要数据.
//	 *
//	 * <p>
//	 * 一个表情中有0或1个音频文件，且文件名是"audio.*"
//	 *
//	 * @param faceIdentId faceIdentId就是表情的文件夹名
//	 * @return 如果找到名为 {@link #SENCE_FACE_AUDIO_NAME}的音频文件则返回File引用，否则返回null
//	 */
//	public static File getFaceAudio(String scenseName, boolean myselfScence, String faceIdentId)
//	{
//		String facePath = getSenceAbsolutePath(myselfScence)+scenseName+"/"+SENCE_FACES_DIR+faceIdentId+"/";
//		File faceDir = new File(facePath);
//		if(faceDir.exists())
//		{
//			// 遍历表情文件夹下面的文件
//			for(File faceContentFile : faceDir.listFiles())
//			{
//				// 找到音频文件
//				if(FileHelper.getFileNameWithoutExt(faceContentFile.getName()).equals(SENCE_FACE_AUDIO_NAME))
//					return faceContentFile;
//			}
//		}
//		return null;
//	}
//
//	/**
//	 * 构造方法.
//	 *
//	 * @param senceName 目前场景名就是它的文件夹名
//	 * @param myselfScence true表示是本地用户自已的场景，否则是缓存的好友的场景
//	 */
//	public SenceMeta(String senceName, boolean myselfScence)
//	{
//		this.senceName = senceName;
//		this.myselfScence = myselfScence;
//	}
//
//	/**
//	 * 载入本场景的资源数据.
//	 *
//	 * <p>
//	 * <b>本方法必须被调用，否则本类对象的数据模型将是空的.</b>
//	 *
//	 * @see #isHasLoaded()
//	 */
//	public SenceMeta loadDatas()
//	{
//		clearAll();
//
//		System.out.println("@@@@@@@@@@@@this.getSubBackgroundsAbsolutePath()="+this.getBackgroundsAbsolutePath());
//		// 载入背景图（支持多张）
//		File backgroundsDir = new File(this.getBackgroundsAbsolutePath());
//		System.out.println("111111111111111111backgroundsDir.exists()?"+backgroundsDir.exists());
//		if(backgroundsDir.exists())
//		{
//			File[] bgFile = backgroundsDir.listFiles();
//			// 进行升序排序（否则显示时就没有顺序了）
//			Arrays.sort(bgFile, new ToolKits.FileNameComparator());
//			for(File f : bgFile)
//			{
//				System.out.println("111111111111111111f ?"+f.getAbsolutePath());
//				// 目前是以文件名作为ident
//				backgroundsMap.put(FileHelper.getFileNameWithoutExt(f.getName()), f);
//			}
//		}
//
//		// 载入表情集
//		File facesDir = new File(this.getFacesAbsolutePath());
//		System.out.println("2222222222222222222facesDir.exists()?"+facesDir.exists());
//		if(facesDir.exists())
//		{
//			// 遍历表情子目录（一个目录就是一个表情动画集：多张图将会自动组合成动画）
//			File[] faceDirs = facesDir.listFiles();
//			System.out.println("faceDirsYYYYYYYYYYYYYYYYYY前="+Arrays.toString(faceDirs));
//			// 进行升序排序（否则显示时就没有顺序了）
//			Arrays.sort(faceDirs, new ToolKits.FileNameComparator());
//			System.out.println("faceDirsYYYYYYYYYYYYYYYYYY后="+Arrays.toString(faceDirs));
//			for(File faceDir : faceDirs)
//			{
//				System.out.println("2222222222222222222faceDir?"+faceDir.getAbsolutePath());
//
//				// 遍历每个子目录下的表情图片文件并组合成该表情集
//				ArrayList<File> facePicArray = new ArrayList<File>();
//				File[] facePicFiles = faceDir.listFiles();
//				for(File facePic : facePicFiles)
//				{
//					// 跳过该表情所对应的音频文件(一个表情中有0或1个音频文件，且文件名是"audio.*")
//					if(!FileHelper.getFileNameWithoutExt(facePic.getName()).equals(SENCE_FACE_AUDIO_NAME))
//						facePicArray.add(facePic);
//				}
//
//				// 目前是以表情集名（文件夹名）作为ident：将该表情集放入Map中存起来
//				facesMap.put(faceDir.getName(), facePicArray);
//			}
//		}
//
//		// 载入声音（支持多种）
//		File soundsDir = new File(this.getSoundsAbsolutePath());
//		System.out.println("33333333333333333333soundsDir.exists()?"+soundsDir.exists());
//		if(soundsDir.exists())
//		{
//			File[] soundFiles = soundsDir.listFiles();
//			// 进行升序排序（否则显示时就没有顺序了）
//			Arrays.sort(soundFiles, new ToolKits.FileNameComparator());
//			for(File f : soundFiles)
//			{
//				System.out.println("33333333333333333333f?"+f.getAbsolutePath());
//
//				// 目前是以声音文件名作为ident
//				soundsMap.put(FileHelper.getFileNameWithoutExt(f.getName()), f);
//			}
//		}
//
//		// 载入快捷回复
//		File repliesFile = new File(this.getRepliesAbsolutePath());
//		System.out.println("44444444444444444444444repliesFile.exists()?"+repliesFile.exists());
//		if(repliesFile.exists())
//		{
//			try
//			{
//				String repliesOriginalText = FileHelper.readStringFromFile(repliesFile);
//				System.out.println("44444444444444444444444repliesOriginalText?"+repliesOriginalText);
//				if(repliesOriginalText != null)
//				{
//					// 载入快捷回复
//					String[] repliesStrs = CommonUtils.splitStringByChar(repliesOriginalText,"@@@");
//					System.out.println("Arrays.toString(repliesStrs)="+Arrays.toString(repliesStrs));
//					if(repliesStrs != null)
//					{
//						// 将每一个快捷回复放入集合中
//						for(String reply : repliesStrs)
//							repliesArray.add(reply);
//					}
//				}
//			}
//			catch (Exception e)
//			{
//				Log.w(TAG, "解析回复时出错了，"+e.getMessage());
//			}
//		}
//
//		hasLoaded = true;
//		return this;
//	}
//
//	public void clearAll()
//	{
//		backgroundsMap.clear();
//		facesMap.clear();
//		soundsMap.clear();
//		repliesArray.clear();
//
//		hasLoaded = false;
//	}
//
//	/**
//	 * 本场景的所有资源是否已经载入完毕.
//	 *
//	 * <p>
//	 * <b>提示：</b>一个场景只有在截入完毕的情下，该场景对应的数据模型才建立完毕，否则数据模型是空的.
//	 *
//	 * @return true表示载入完毕，否则表示没有截入。
//	 */
//	public boolean isHasLoaded()
//	{
//		return this.hasLoaded;
//	}
//
//	/**
//	 * <b>注意：</b>当 {@link #isHasLoaded()} == false，本方法将不能返回需要数据.
//	 *
//	 * @return
//	 */
//	public MapNoHash<String, File> getBackgroundsMap()
//	{
//		return backgroundsMap;
//	}
//	/**
//	 * <b>注意：</b>当 {@link #isHasLoaded()} == false，本方法将不能返回需要数据.
//	 *
//	 * @return
//	 */
//	public MapNoHash<String, ArrayList<File>> getFacesMap()
//	{
//		return facesMap;
//	}
//	/**
//	 * <b>注意：</b>当 {@link #isHasLoaded()} == false，本方法将不能返回需要数据.
//	 *
//	 * @return
//	 */
//	public MapNoHash<String, File> getSoundsMap()
//	{
//		return soundsMap;
//	}
//	/**
//	 * <b>注意：</b>当 {@link #isHasLoaded()} == false，本方法将不能返回需要数据.
//	 *
//	 * @return
//	 */
//	public ArrayList<String> getRepliesArray()
//	{
//		return repliesArray;
//	}
//
//	/**
//	 * <b>注意：</b>当 {@link #isHasLoaded()} == false，本方法将不能返回需要数据.
//	 *
//	 * @param identId
//	 * @return
//	 */
//	public File getBackground(String identId)
//	{
//		return backgroundsMap.get(identId);
//	}
//	/**
//	 * <b>注意：</b>当 {@link #isHasLoaded()} == false，本方法将不能返回需要数据.
//	 *
//	 * @param identId
//	 * @return
//	 */
//	public ArrayList<File> getFace(String identId)
//	{
//		return facesMap.get(identId);
//	}
//
//	/**
//	 * <b>注意：</b>当 {@link #isHasLoaded()} == false，本方法将不能返回需要数据.
//	 *
//	 * <p>
//	 * 一个表情中有0或1个音频文件，且文件名是"audio.*"
//	 *
//	 * @param faceIdentId faceIdentId就是表情的文件夹名
//	 * @return 如果找到名为 {@link #SENCE_FACE_AUDIO_NAME}的音频文件则返回File引用，否则返回null
//	 */
//	public File getFaceAudio(String faceIdentId)
//	{
//		return getFaceAudio(this.senceName, this.myselfScence, faceIdentId);
//	}
//	/**
//	 * <b>注意：</b>当 {@link #isHasLoaded()} == false，本方法将不能返回需要数据.
//	 *
//	 * @param identId
//	 * @return
//	 */
//	public File getSound(String identId)
//	{
//		return soundsMap.get(identId);
//	}
//	/**
//	 * <b>注意：</b>当 {@link #isHasLoaded()} == false，本方法将不能返回需要数据.
//	 *
//	 * @param index
//	 * @return
//	 */
//	public String getReply(int index)
//	{
//		if(repliesArray.size() > 0)
//			return repliesArray.get(index);
//		return null;
//	}
//
//	/**
//	 * 取出某角色中第一张背景图片.
//	 * <p>
//	 * 此方法的应用场景通常是为了取某一个角色的背景封面.
//	 *
//	 * @param scenseName
//	 * @param loadDatasIfNo
//	 * @return
//	 */
//	public File getScenseFirstPicOfBackgroundFile()
//	{
////		if(sm != null)
//		{
//			// 遍历背景集元始数据模型
//			MapNoHash<String, File> facesMap = this.getBackgroundsMap();
//			for(String key : facesMap.keys())
//			{
//				// 取出该背景
//				File faceFile = facesMap.get(key);
//				if(faceFile != null)
//					return faceFile;
//			}
//		}
//		return null;
//	}
//	/**
//	 * 取出某角色中第一张背景图片.
//	 * <p>
//	 * 此方法的应用场景通常是为了取某一个角色的背景封面.
//	 *
//	 * @param scenseName
//	 * @param loadDatasIfNo
//	 * @return
//	 */
//	public Drawable getScenseFirstPicOfBackground()
//	{
//		File FirstPicOfBackgroundFile = getScenseFirstPicOfBackgroundFile();
//		if(FirstPicOfBackgroundFile != null)
//			return com.eva.android.BitmapHelper.loadDrawble(FirstPicOfBackgroundFile.getAbsolutePath());
//		return null;
//	}
//
//	public Drawable getScenseFirstPicOfFace(String faceIdent)
//	{
//		// 遍历表情集元始数据模型
//		MapNoHash<String, ArrayList<File>> facesMap = this.getFacesMap();
//		for(String key : facesMap.keys())
//		{
//			if(key.equals(faceIdent))
//			{
//				// 取出该表情
//				ArrayList<File> faceFiles = facesMap.get(key);
//				if(faceFiles.size()>0)
//				{
//					// 取该表情的第一帧作为该其封面
//					File fiestPic = faceFiles.get(0);
//
//					// 有1次在模拟器里发生了loadDrawble时OutOfMemmery的错误，不知为何会发生，先加一个异常处理吧，省的崩溃！
//					try
//					{
//						return com.eva.android.BitmapHelper.loadDrawble(fiestPic.getAbsolutePath());
//					}
//					catch (Exception e)
//					{
//						return null;
//					}
//				}
//			}
//		}
//		return null;
//	}
//
//	//---------------------------------------------------------------------------------------------------
//	/**
//	 * 本场景对应的主绝对目标路径："/sdcard/missu/sences/my_sences/police_girl/"。
//	 *
//	 * @return
//	 */
//	public String getThisSenceAbsolutePath()
//	{
//		return SenceMeta.getSenceAbsolutePath(this.myselfScence)+senceName+"/";
//	}
//
//	/**
//	 * 本场景对应的“背景图片”绝对目标路径："/sdcard/missu/sences/my_sences/police_girl/backgrounds/"。
//	 *
//	 * @return
//	 */
//	public String getBackgroundsAbsolutePath()
//	{
//		return getThisSenceAbsolutePath()+SENCE_BACKGROUNDS_DIR;
//	}
//	/**
//	 * 本场景对应的“表情”绝对目标路径："/sdcard/missu/sences/my_sences/police_girl/faces/"。
//	 *
//	 * @return
//	 */
//	public String getFacesAbsolutePath()
//	{
//		return getThisSenceAbsolutePath()+SENCE_FACES_DIR;
//	}
//	/**
//	 * 本场景对应的“声音”绝对目标路径："/sdcard/missu/sences/my_sences/police_girl/sounds/"。
//	 *
//	 * @return
//	 */
//	public String getSoundsAbsolutePath()
//	{
//		return getThisSenceAbsolutePath()+SENCE_SOUNDS_DIR;
//	}
//	/**
//	 * 本场景对应的“快捷回复”绝对目标路径："/sdcard/missu/sences/my_sences/police_girl/replies.txt"。
//	 *
//	 * @return
//	 */
//	public String getRepliesAbsolutePath()
//	{
//		return getThisSenceAbsolutePath()+SENCE_REPLIES_FILE;
//	}
//
//	/**
//	 * 返回true表示本类提供的是本地用户自已的场景，否则表示提供的是缓存的对方（好友）的场景数据模型。
//	 * <p>
//	 * 区别在于：本地用户自已的场景跟缓存的对方（好友）的场景所存储的目录是不相同的。
//	 *
//	 * @return 本对象描述的是否是本地用户自已的场景数据模型
//	 * @see #$MY_SENCE_PATH
//	 * @see #$FRIEND_SENCE_PATH
//	 */
//	public boolean isMyselfScence()
//	{
//		return myselfScence;
//	}
//
//	public String getSenceName()
//	{
//		return senceName;
//	}
//}
